using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.IO;

/// <summary>
/// 登录界面UI控制器，处理登录界面上的按钮事件
/// </summary>
public class LoginUI : MonoBehaviour
{
    [Header("UI按钮")]
    [SerializeField] private Button startButton;    // 开始游戏按钮
    [SerializeField] private Button optionsButton;  // 可选的选项按钮
    [SerializeField] private Button quitButton;     // 可选的退出按钮
    [SerializeField] private Button importButton;   // 导入Excel按钮
    
    [Header("UI文本")]
    [SerializeField] private Text statusText;       // 状态文本显示
    [SerializeField] private Text fileNameText;     // 文件名文本显示

    [Header("场景设置")]
    [SerializeField] private string battleSceneName = "Battle";  // 战斗场景名称
    
    [Header("文件导入设置")]
    [SerializeField] private string defaultExcelPath = "D:/wordlist.xlsx";  // PC平台测试用的默认Excel路径
    
    // ExcelFileImporter实例
    private ExcelFileImporter excelImporter;
    
    private void Awake()
    {
        // 确保ExcelFileImporter实例已创建，并且会在场景切换时保持
        excelImporter = ExcelFileImporter.Instance;
        
        // 设置按钮监听
        if (startButton != null)
        {
            startButton.onClick.AddListener(OnStartButtonClicked);
        }
        else
        {
            Debug.LogWarning("Start按钮未分配！请在Inspector中设置。");
            
            // 尝试自动查找
            startButton = GameObject.Find("StartButton")?.GetComponent<Button>();
            if (startButton != null)
            {
                startButton.onClick.AddListener(OnStartButtonClicked);
                Debug.Log("自动找到并设置了Start按钮");
            }
        }
        
        // 设置其他按钮（如果有）
        if (optionsButton != null)
        {
            optionsButton.onClick.AddListener(OnOptionsButtonClicked);
        }
        
        if (quitButton != null)
        {
            quitButton.onClick.AddListener(OnQuitButtonClicked);
        }
        
        // 设置导入按钮
        if (importButton == null)
        {
            importButton = GameObject.Find("InsertFile")?.GetComponent<Button>();
        }
        
        if (importButton != null)
        {
            importButton.onClick.AddListener(OnImportButtonClicked);
            Debug.Log("已设置导入按钮点击事件");
        }
        else
        {
            Debug.LogWarning("未找到导入按钮！请确保场景中有名为InsertFile的按钮。");
        }
        
        // 尝试查找状态文本
        if (statusText == null)
        {
            statusText = GameObject.Find("StatusText")?.GetComponent<Text>();
        }
        
        // 尝试查找文件名文本
        if (fileNameText == null)
        {
            fileNameText = GameObject.Find("FileNameText")?.GetComponent<Text>();
        }
        
        // 检查上次导入的文件
        CheckLastImportedFile();
    }
    
    /// <summary>
    /// 检查上次导入的Excel文件
    /// </summary>
    private void CheckLastImportedFile()
    {
        string lastFilePath = excelImporter.GetLastImportedFilePath();
        if (!string.IsNullOrEmpty(lastFilePath) && File.Exists(lastFilePath))
        {
            UpdateStatusText($"上次导入: {Path.GetFileName(lastFilePath)}");
            UpdateFileNameText(Path.GetFileName(lastFilePath));
        }
        else
        {
            UpdateStatusText("未导入词库");
            UpdateFileNameText("未选择文件");
        }
    }
    
    /// <summary>
    /// 更新状态文本
    /// </summary>
    private void UpdateStatusText(string message)
    {
        if (statusText != null)
        {
            statusText.text = message;
        }
        else
        {
            Debug.Log($"状态: {message}");
        }
    }
    
    /// <summary>
    /// 更新文件名文本
    /// </summary>
    private void UpdateFileNameText(string fileName)
    {
        if (fileNameText != null)
        {
            fileNameText.text = fileName;
        }
        else
        {
            Debug.Log($"当前文件: {fileName}");
        }
    }
    
    /// <summary>
    /// 开始按钮点击事件：直接加载战斗场景
    /// </summary>
    private void OnStartButtonClicked()
    {
        Debug.Log("开始游戏按钮点击，直接加载战斗场景");
        SceneManager.LoadScene(battleSceneName);
    }
    
    /// <summary>
    /// 选项按钮点击事件
    /// </summary>
    private void OnOptionsButtonClicked()
    {
        Debug.Log("选项按钮点击");
        // 这里可以添加显示选项面板的逻辑
    }
    
    /// <summary>
    /// 退出按钮点击事件
    /// </summary>
    private void OnQuitButtonClicked()
    {
        Debug.Log("退出按钮点击");
        
        #if UNITY_EDITOR
        UnityEditor.EditorApplication.isPlaying = false;
        #else
        Application.Quit();
        #endif
    }
    
    /// <summary>
    /// 导入按钮点击事件：导入Excel文件
    /// </summary>
    private void OnImportButtonClicked()
    {
        Debug.Log("导入Excel按钮点击");
        UpdateStatusText("正在选择文件...");
        
        #if UNITY_EDITOR
        // Unity编辑器中：使用EditorUtility
        OpenFileInEditor();
        #elif UNITY_STANDALONE
        // PC独立平台：使用默认路径
        if (File.Exists(defaultExcelPath))
        {
            ImportExcelFile(defaultExcelPath);
        }
        else
        {
            UpdateStatusText($"未找到默认文件: {defaultExcelPath}");
            Debug.LogWarning($"默认Excel文件不存在: {defaultExcelPath}");
        }
        #elif UNITY_ANDROID
        // Android平台：使用原生文件选择器
        StartAndroidFilePicker();
        #else
        Debug.LogWarning("当前平台不支持导入Excel文件");
        UpdateStatusText("当前平台不支持导入");
        #endif
    }
    
    /// <summary>
    /// 在Unity编辑器中打开文件对话框
    /// </summary>
    private void OpenFileInEditor()
    {
        #if UNITY_EDITOR
        string path = UnityEditor.EditorUtility.OpenFilePanel("选择Excel文件", "", "xlsx,xls");
        if (!string.IsNullOrEmpty(path))
        {
            ImportExcelFile(path);
        }
        else
        {
            UpdateStatusText("取消导入");
        }
        #endif
    }
    
    /// <summary>
    /// 导入Excel文件（PC平台）
    /// </summary>
    private void ImportExcelFile(string filePath)
    {
        if (excelImporter.ImportExcelFile(filePath))
        {
            string fileName = Path.GetFileName(filePath);
            UpdateStatusText($"导入成功: {fileName}");
            UpdateFileNameText(fileName);
        }
        else
        {
            UpdateStatusText("导入失败");
            UpdateFileNameText("导入失败");
        }
    }
    
    /// <summary>
    /// 启动Android文件选择器（Android平台）
    /// </summary>
    private void StartAndroidFilePicker()
    {
        #if UNITY_ANDROID
        // 暂时只添加占位符代码
        Debug.Log("Android平台的文件选择器功能将在后续实现...");
        UpdateStatusText("Android文件选择器即将实现");
        
        // 后续实现：
        // 1. 使用Unity的NativeFilePicker插件
        // 2. 或使用Android的Intent系统
        #endif
    }
} 